package Others.DesignPattern.ProxyPattern.Pattern;

import Others.DesignPattern.ProxyPattern.Original.Object.Pursuit;
import Others.DesignPattern.ProxyPattern.Pattern.Object.BePursued;
import Others.DesignPattern.ProxyPattern.Pattern.Object.Broker;

import javax.security.auth.Subject;

public class main {
    public static void main(String[] args) {
        //代理模式

        BePursued lijiaojiao = new BePursued("李娇娇");
        Broker daili = new Broker(lijiaojiao);

        daili.giveDolls();
        daili.giveFlowers();
        daili.giveChocolates();

        //以上就是完整的代理模式
    }
//    代理模式（Proxy Pattern）是一种结构型设计模式，它为其他对象提供一种代理以控制对这个对象的访问。
//    在代理模式中，代理对象充当了目标对象的替身，客户端不再直接与目标对象交互，而是通过代理对象来间接访问目标对象。

//    模式结构
//    代理模式一般包含以下几个角色：
//
//    抽象主题（Subject）：定义了真实主题和代理主题的共同接口，这样在任何使用真实主题的地方都可以使用代理主题，使得客户端可以通过抽象主题来访问真实主题和代理主题。
//    真实主题（RealSubject）：实现了抽象主题接口，定义了代理对象所代表的真实对象，是客户端最终要访问的对象，包含了具体的业务逻辑。
//    代理主题（Proxy）：也实现了抽象主题接口，持有一个对真实主题对象的引用，负责控制对真实主题的访问，可以在访问真实主题前后进行一些预处理或后处理操作，比如权限验证、缓存处理等。
}
